﻿//13. 罗马数字转整数
/*https://leetcode.cn/problems/roman-to-integer/description/ */
//思路：这里面存在特殊的表示：I，X，C可以放在其余数的左边作为整数数字
//我们将这样的数字全部加起来，并将这样组合的数字赋值为其他字母（N）
//然后甄别掉N，将其他字母对应的数字进行累加
int romanToInt(char* s)
{
    int len = strlen(s);
    int sum = 0;
    //将特殊的数字置为N，并且将其转化的整数累加起来
    int i = 0;
    for (i = 0; i < len - 1; i++)
    {
        if (s[i] == 'I' && s[i + 1] == 'V')
        {
            sum += 4;
            s[i] = 'N';
            s[i + 1] = 'N';
        }
        if (s[i] == 'I' && s[i + 1] == 'X')
        {
            sum += 9;
            s[i] = 'N';
            s[i + 1] = 'N';
        }
        if (s[i] == 'X' && s[i + 1] == 'L')
        {
            sum += 40;
            s[i] = 'N';
            s[i + 1] = 'N';
        }
        if (s[i] == 'X' && s[i + 1] == 'C')
        {
            sum += 90;
            s[i] = 'N';
            s[i + 1] = 'N';
        }
        if (s[i] == 'C' && s[i + 1] == 'D')
        {
            sum += 400;
            s[i] = 'N';
            s[i + 1] = 'N';
        }
        if (s[i] == 'C' && s[i + 1] == 'M')
        {
            sum += 900;
            s[i] = 'N';
            s[i + 1] = 'N';
        }
    }
    //将剩下的数字进行累加
    for (i = 0; i < len; i++)
    {
        switch (s[i])
        {
        case 'I':
            sum += 1;
            break;
        case 'V':
            sum += 5;
            break;
        case 'X':
            sum += 10;
            break;
        case 'L':
            sum += 50;
            break;
        case 'C':
            sum += 100;
            break;
        case 'D':
            sum += 500;
            break;
        case 'M':
            sum += 1000;
            break;
        }
    }
    return sum;
}